fix-creating-help-index-on-read-only-file-system
authorCarlos Laviola <claviola@debian.org>
Sat, 13 Apr 2013 07:52:42 +0000 (07:52 +0000)
committerPeter Michael Green <plugwash@debian.org>
Sat, 13 Apr 2013 07:52:42 +0000 (07:52 +0000)
This patch removes error thrown when trying to build help index if the
documentation is installed on a read only file system and tries to store the
index file in current directory. (Closes: bug#662814)

Gbp-Pq: Name fix-creating-help-index-on-read-only-file-system.diff

fpcsrc/ide/fpmhelp.inc
fpcsrc/ide/whtmlhlp.pas

index 182394188cd177d54242095b88c0f7f48492b5dc..fcabddb3e73e060ccc5284d55ac2209f5c964649 100644 (file)
@@ -132,13 +132,48 @@ begin
 end;
 
 procedure THelpFilesDialog.HandleEvent(var Event: TEvent);
+  function StoreHtmlIndexFile(const FileName: string; LS: PFPHTMLFileLinkScanner;var Re: Word; SilentFails: Boolean): Boolean;
+  var
+    BS: PBufStream;
+  begin
+    if ExistsFile(FileName) then
+      if ConfirmBox(FormatStrStr(msg_filealreadyexistsoverwrite,FileName),nil,true)<>cmYes then
+        Re:=cmCancel;
+    if Re<>cmCancel then
+    begin
+      PushStatus(FormatStrStr(msg_storinghtmlindexinfile,FileName));
+      New(BS, Init(FileName, stCreate, 4096));
+      if Assigned(BS)=false then
+        begin
+          if not SilentFails then
+          begin
+            ErrorBox(FormatStrStr(msg_cantcreatefile,FileName),nil);
+          end;
+          Re:=cmCancel;
+        end
+      else
+        begin
+          LS^.StoreDocuments(BS^);
+          if BS^.Status<>stOK then
+            begin
+              if not SilentFails then
+              begin
+                ErrorBox(FormatStrInt(msg_errorstoringindexdata,BS^.Status),nil);
+              end;
+              Re:=cmCancel;
+            end;
+          Dispose(BS, Done);
+        end;
+      PopStatus;
+    end;
+  StoreHtmlIndexFile := Re <> cmCancel;
+  end;
 var I: integer;
     D: PFileDialog;
     FileName: string;
     Re: word;
     S: string;
     LS: PFPHTMLFileLinkScanner;
-    BS: PBufStream;
 begin
   case Event.What of
     evKeyDown :
@@ -193,30 +228,15 @@ begin
                     else
                       begin
                         FileName:=DirAndNameOf(FileName)+HTMLIndexExt;
-                        if ExistsFile(FileName) then
-                          if ConfirmBox(FormatStrStr(msg_filealreadyexistsoverwrite,FileName),nil,true)<>cmYes then
-                            Re:=cmCancel;
-                        if Re<>cmCancel then
+                        if not StoreHtmlIndexFile(FileName, LS, Re, True) then
                         begin
-                          PushStatus(FormatStrStr(msg_storinghtmlindexinfile,FileName));
-                          New(BS, Init(FileName, stCreate, 4096));
-                          if Assigned(BS)=false then
-                            begin
-                              ErrorBox(FormatStrStr(msg_cantcreatefile,FileName),nil);
-                              Re:=cmCancel;
-                            end
-                          else
-                            begin
-                              LS^.StoreDocuments(BS^);
-                              if BS^.Status<>stOK then
-                                begin
-                                  ErrorBox(FormatStrInt(msg_errorstoringindexdata,BS^.Status),nil);
-                                  Re:=cmCancel;
-                                end;
-                              Dispose(BS, Done);
-                            end;
-                          PopStatus;
-                        end;
+                          Re:=ConfirmBox(FormatStrStr('Could not create "%s", try creating it in local dir?', FileName),nil,true);
+                          FileName := GetCurDir + NameAndExtOf(FileName);
+                          if Re = cmYes then
+                          begin
+                            StoreHtmlIndexFile(FileName, LS, Re, False);
+                          end;
+                        end
                       end;
                     Dispose(LS, Done);
                     PopStatus;
index 7df67af3ab806f452f59b78ec5fcccd6b06d0770..216a2185309c9b14913586666d58b6c0a86bbc1f 100644 (file)
@@ -1615,7 +1615,7 @@ begin
     OK:=Assigned(LS);
     if OK then
     begin
-      LS^.SetBaseDir(DirOf(IndexFileName));
+      {LS^.SetBaseDir(DirOf(IndexFileName)); already set by LoadDocuments to real base dire stored into htx file. This allows storing toc file in current dir in case doc installation dir is read only.}
       for I:=0 to LS^.GetDocumentCount-1 do
         begin
           TLI:=TopicLinks^.AddItem(LS^.GetDocumentURL(I));